package com.happok.onlineclass.usermanagement.user.service;

import com.happok.onlineclass.usermanagement.authentication.dto.LoginResultDTO;
import com.happok.onlineclass.usermanagement.common.dto.IdDTO;
import com.happok.onlineclass.usermanagement.user.dto.*;

import javax.servlet.http.HttpServletRequest;
import java.net.URISyntaxException;

/**
 * 功能说明
 *
 * @author : chenac
 * @version : v1.0
 * @date : 2021/7/15 14:45
 * @updateUser : chenac
 * @updateTime : 2021/7/15 14:45
 * @updateRemark : 无
 * @since : Springboot 2.5.2
 */
public interface UserService {
    /**
     * 修改个人用户
     *
     * @param user          用户信息
     * @param updateUserDTO 更新用户信息参数
     * @author: chenac
     * @date: 14:46
     * @execption:
     * @return: void
     */
    void updatePersonalUser(String user,
                            UpdateUserDTO updateUserDTO) throws Exception;

    /**
     * 查询个人用户详情
     *
     * @param user
     * @author: chenac
     * @date: 14:46
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.user.dto.UserDetailDTO
     */
    UserDetailDTO getPersonalUserDetail(String user) throws URISyntaxException;

    /**
     * 用户注册
     *
     * @param registerUserDTO
     * @author: chenac
     * @date:  15:12
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.authentication.dto.LoginResultDTO
     */
    LoginResultDTO registerUser(RegisterUserDTO registerUserDTO, HttpServletRequest req) throws URISyntaxException;

    /**
     * 忘记密码-个人重置密码
     *
     * @param personalResetPwdDTO
     * @author: chenac
     * @date:  12:06
     * @execption:
     * @return: void
     */
    IdDTO personalResetPwd(PersonalResetPwdDTO personalResetPwdDTO);

    /**
     * 修改手机号或邮箱
     *
     * @param user
     * @param updateUserAccountDTO
     * @author: chenac
     * @date:  12:53
     * @execption:
     * @return: void
     */
    void updateUserAccount(String user, UpdateUserAccountDTO updateUserAccountDTO);

    /**
     * 修改密码
     *
     * @param user
     * @param updateUserPwd
     * @author: chenac
     * @date:  12:53
     * @execption:
     * @return: void
     */
    void updateUserPwd(String user, UpdateUserPwd updateUserPwd);
}